home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 081-090 / amok88 / arexxbox / rxif.lha / rxif / rx_help.c < prev    next >
C/C++ Source or Header  |  1993-05-18  |  2KB  |  97 lines

  1.  
  2. void rx_help( struct RexxHost *host, struct rxd_help **rxd, long action, struct RexxMsg *rexxmsg )
  3. {
  4.     struct rxd_help *rd = *rxd;
  5.     struct rxs_command *rxc;
  6.  
  7.     /*
  8.      * Dieser HELP-Befehl unterstützt (noch) nicht das PROMPT-Keyword
  9.      * da das nur im Rahmen eines GUIs Sinn hat
  10.      */
  11.  
  12.     switch( action )
  13.     {
  14.         case RXIF_INIT:
  15.             *rxd = AllocVec( sizeof *rd, MEMF_CLEAR );
  16.             break;
  17.             
  18.         case RXIF_ACTION:
  19.             /* Insert your code HERE */
  20.             
  21.             if( rd->arg.prompt )
  22.             {
  23.                 rd->rc = -10;
  24.                 rd->rc2 = (long) "Prompt option not yet implemented";
  25.                 return;
  26.             }
  27.             
  28.             if( rd->arg.command )
  29.             {
  30.                 rxc = FindRXCommand( rd->arg.command );
  31.                 if( !rxc )
  32.                 {
  33.                     rd->rc = -10;
  34.                     rd->rc2 = (long) "Unknown Command";
  35.                     return;
  36.                 }
  37.                 
  38.                 if( rd->res.commanddesc = AllocVec(strlen(rxc->command)
  39.                     + (rxc->args    ? strlen(rxc->args)    : 0)
  40.                     + (rxc->results ? strlen(rxc->results) : 0) + 20,
  41.                     MEMF_ANY) )
  42.                 {
  43.                     sprintf( rd->res.commanddesc,
  44.                         "%s%c%s%s%s%s%s",
  45.                         rxc->command, 
  46.                         (rxc->results || rxc->args) ? ' ' : '\0',
  47.                         rxc->results ? "VAR/K,STEM/K" : "",
  48.                         (rxc->results && rxc->args) ? "," : "",
  49.                         rxc->args ? rxc->args : "",
  50.                         rxc->results ? " => " : "",
  51.                         rxc->results ? rxc->results : "" );
  52.                 }
  53.                 else
  54.                 {
  55.                     rd->rc = 10;
  56.                     rd->rc2 = ERROR_NO_FREE_STORE;
  57.                     return;
  58.                 }
  59.             }
  60.             else
  61.             {
  62.                 char **s;
  63.                 
  64.                 if( !(s = AllocVec(sizeof(char *) * command_cnt+1, MEMF_CLEAR)) )
  65.                 {
  66.                     rd->rc = 10;
  67.                     rd->rc2 = ERROR_NO_FREE_STORE;
  68.                     return;
  69.                 }
  70.                 rd->res.commandlist = s;
  71.                 
  72.                 rxc = rxs_commandlist;
  73.                 while( rxc->command )
  74.                 {
  75.                     *s = rxc->command;
  76.                     s++;
  77.                     rxc++;
  78.                 }
  79.             }
  80.             
  81.             break;
  82.         
  83.         case RXIF_FREE:
  84.             /* FREE your local data HERE */
  85.             
  86.             if( rd->res.commanddesc )
  87.                 FreeVec( rd->res.commanddesc );
  88.             if( rd->res.commandlist )
  89.                 FreeVec( rd->res.commandlist );
  90.             
  91.             FreeVec( rd );
  92.             break;
  93.     }
  94.     return;
  95. }
  96.  
  97.